#include "./text.h"

using namespace std;
using namespace MiniUI;
using namespace MiniUI::Type;

const char* TypeObject<Text>::s_szTypeName = "Text";

Text::Text()
: UIObject(GetTypeName())
{
    //set font default.
    m_fontSize = 12;
    m_fontStyle = FONTSTYLE_NORMAL;
    m_align = TEXTALIGN_LEFT;
    m_fontColor = MiniARGB(0xff000000);
    m_bMultiline = false;
}

Text::~Text()
{
}

bool Text::RenderTo(Graphics& graphics, const Type::MiniRect& rcRender, const uint8 blendValue)
{
    graphics.Save();
    graphics.SetAlpha(m_blendValue * (1 + blendValue) >> 8);
    UIObject::ShapeClip(graphics);
    graphics.SetTextSize(m_fontSize);
    graphics.SetDrawColor(m_fontColor);
    graphics.SetFontStyle(m_fontStyle);
    graphics.SetFontFaceName(m_strFontFaceName.c_str());
    MiniRect rcText(0, 0, m_size.cx, m_size.cy);
    graphics.DrawText(m_strText, rcText, m_align, m_bMultiline);
    graphics.Restore();
    return false;
}

void Text::SetValue(const std::string& value)
{
    m_strText = value;
    Update();
}

std::string Text::GetValue()
{
    return m_strText;
}

void Text::SetMultiline(bool bMultiline)
{
    m_bMultiline = bMultiline;
}

bool Text::GetMultiline()
{
    return m_bMultiline;
}

void Text::SetFontSize(int fontSize)
{
    m_fontSize = fontSize;
}

int Text::GetFontSize()
{
    return m_fontSize;
}

void Text::SetFontStyle(uint fontStyle)
{
    m_fontStyle = fontStyle;
}

uint Text::GetFontStyle()
{
    return m_fontStyle;
}

void Text::SetTextAlign(uint align)
{
    m_align = align;
}

uint Text::GetTextAlign()
{
    return m_align;
}

void Text::SetFontColor(const MiniARGB& fontColor)
{
    m_fontColor = fontColor;
}

MiniARGB Text::GetFontColor()
{
    return m_fontColor;
}

void Text::SetFontFaceName(const string& value)
{
    m_strFontFaceName = value;
}

string Text::GetFontFaceName()
{
    return m_strFontFaceName;
}